<?php
class Url {
    /**
     * 分配URL变量
     */
    public static function dispatchUrl() {
        $urlType = Config::get('URL_TYPE');
        if (URL_PATHINFO == $urlType){
            self::dispatchPathinfo();
        } else {
            $_GET[Config::get('VAR_MODULENAME')] = $_GET[Config::get('VAR_MODULENAME')] ? $_GET[Config::get('VAR_MODULENAME')] : Config::get('DEFAULT_MODULE');
            $_GET[Config::get('VAR_ACTIONNAME')] = $_GET[Config::get('VAR_ACTIONNAME')] ? $_GET[Config::get('VAR_ACTIONNAME')] : Config::get('DEFAULT_ACTION');
        }
    }
    
    /**
     * 解析PATHINFO格式的URL并分配变量
     */
    private static function dispatchPathinfo() {
        $pathInfo = array();
        if ($_SERVER['PATH_INFO']) {
            if ('/' == substr($_SERVER['PATH_INFO'], -1))
                $_SERVER['PATH_INFO'] = substr($_SERVER['PATH_INFO'], 0, -1);
            $pathInfo = explode('/', $_SERVER['PATH_INFO']);            
        } else {
            $_GET[Config::get('VAR_MODULENAME')] = $_GET[Config::get('VAR_MODULENAME')] ? $_GET[Config::get('VAR_MODULENAME')] : Config::get('DEFAULT_MODULE');
            $_GET[Config::get('VAR_ACTIONNAME')] = $_GET[Config::get('VAR_ACTIONNAME')] ? $_GET[Config::get('VAR_ACTIONNAME')] : Config::get('DEFAULT_ACTION');
            return ;
        }
        $_GET[Config::get('VAR_MODULENAME')] = isset($pathInfo[1]) ? $pathInfo[1] : Config::get('DEFAULT_MODULE');
        $_GET[Config::get('VAR_ACTIONNAME')] = isset($pathInfo[2]) ? $pathInfo[2] : Config::get('DEFAULT_ACTION');
        if (sizeof($pathInfo) > 3) {
            for ($i=3, $j=sizeof($pathInfo); $i<$j; $i++ ) {
                if ($i % 2 == 1) {
                    $varName = $pathInfo[$i];
                } else {
                    $_GET[$varName] = rawurldecode($pathInfo[$i]);
                }
            }
            if ($i % 2 == 0) {
                $_GET[Config::get('VAR_LASTKEY')] = rawurldecode($varName);
            }
        }
    }
    
    /**
     * 返回WEB访问路径
     */
    public static function getUrl($action, $module=MODULE_NAME, $args = array()) {
        $module = '' == $module ? MODULE_NAME : $module;
        $urlType = Config::get('URL_TYPE');
        $url = $_SERVER['SCRIPT_NAME'];
        if (URL_PATHINFO == $urlType) {
            $url .= '/' . $module . '/' . $action;
            if (is_array($args))
            foreach ($args as $key=>$val) {
                if (false == in_array($key, array('name', 'module', 'action'))) {
                    $url .= '/' . $key . '/' . rawurlencode($val);
                }
            }
        } else {
            $url .= '?' . Config::get('VAR_MODULENAME') . '=' . $module . '&' . Config::get('VAR_ACTIONNAME') . '=' . $action;
            if (is_array($args))
            foreach ($args as $key=>$val) {
                if (false == in_array($key, array('name', 'module', 'action'))) {
                    $url .= '&' . $key . '=' . rawurlencode($val);
                }
            }
        }
        return $url;
    }
};
?>